// 基于配置好的axios 提供一个调用接口函数
import axios from 'axios'
// import JSON from 'json-bigint'
import store from '../store/index'
import router from '../router/index'
// import jwtDecode from 'jwt-decode'
import {
  reFreshToken
} from '../api/modules/login'

//! 创建一个新的axios实例  进行配置(开发时需要自行填写公共请求地址)
const instance = axios.create({
  baseURL: process.env.BASE_API,
  //baseURL: Glod.BaseUrl,
  timeout: 30000,
  headers: {
    'Content-Type': 'application/json'
  },
  transformResponse: [data => {
    try {
      return JSON.parse(data)
    } catch (e) {
      return data
    }
  }]
})

// 请求拦截 （加token）
instance.interceptors.request.use(config => {
  // config.headers = {
  //   'Content-Type': 'application/json' //  注意：设置很关键 
  // }
  // todo 预防跨域复杂请求
  // if(config.headers['Content-Type'] === 'application/json'){ 
  config.headers['Content-Type'] = 'text/plain'
  // }
  if (store.getters.checkToken()) {
    // config.headers.Authorization = `xytoken_ ${store.state.app.user.token}`
    config.headers.Authorization = store.getters.token();
  }
  return config
}, err => {
  return Promise.reject(err)
})

//! 响应拦截 ( 成功：剔除无用数据)
// instance.interceptors.response.use(res => {
//   let newToken = res.headers['xy-refresh-token'];
//   if (newToken && newToken !== "undefined") {
//     store.commit('delToken');
//     store.commit('setToken', newToken);
//   }
//   let serverStatus = res.data.code;
//   if (serverStatus === '401') { //服务端返回了401,说明token已失效,退出登录,清除token
//     store.commit('delToken')
//     store.commit('delTabs')
//     router.push({
//       path: '/login'
//     })
//   }
//   return res.data
// }, err => {
//   //! 处理token失效
//   // const user = store.state.app.user
//   // // Base64解密
//   // const userToken = jwtDecode(user.token)
//   // const now = Math.round(new Date().getTime() / 1000) - 10
//   // const login = {
//   //   path: '/login',
//   //   query: {
//   //     redirect: router.currentRoute.path
//   //   }
//   // }
//   // if (now > userToken.exp) {
//   //   // reFreshToken().then( (res) => {
//   //   // })
//   //   store.commit('delToken')
//   //   store.commit('delTabs')
//   //   location.reload()
//   //   router.replace({
//   //     path: '/login',
//   //     query: {
//   //       redirect: router.currentRoute.fullPath
//   //     }
//   //   });
//   //   return Promise.reject(err)
//   // }
//   // if (err.response.status === 401) {
//   store.commit('delToken')
//   store.commit('delTabs')
//   // const user = store.state.app.user
//   const login = {
//     path: '/login'
//   }
//   // if (!user.token) {
//   router.push(login)
//   return Promise.reject(err)
//   // }
//   // }
//   // return Promise.reject(err)
// })

export default (url, method, data, headers) => {
  return instance({
    url,
    method,
    headers,
    [method.toLowerCase() === 'get' ? 'params' : 'data']: data
  })
}
